package demo.mqtt;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.mqtt.server.ServerConsumer;
import com.alibaba.mqtt.server.ServerProducer;
import com.alibaba.mqtt.server.callback.SendCallback;
import com.alibaba.mqtt.server.callback.StatusListener;
import com.alibaba.mqtt.server.common.SendResult;
import com.alibaba.mqtt.server.config.ChannelConfig;
import com.alibaba.mqtt.server.config.ConsumerConfig;
import com.alibaba.mqtt.server.config.ProducerConfig;
import com.alibaba.mqtt.server.model.StatusNotice;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

import java.nio.charset.StandardCharsets;
import java.util.UUID;

/**
 * @author wangly on @date 2024/3/19
 */
public class MQTTSendP2PMessageYun {
    /**
     * 您创建的云消息队列 MQTT 版的实例接入点。
     * 获取云端SDK的接入点，请联系云消息队列 MQTT 版技术支持，钉钉群号：35228338。。
     * 接入点地址必须填写分配的域名，不得使用IP地址直接连接，否则可能会导致服务端异常。
     */
    static String domain = MqttConfig.instanceId+"-server-internal.mqtt.aliyuncs.com";

    /**
     * 使用的协议和端口必须匹配，该参数值固定为5672。
     */
    static int port = 5672;

    /**
     * 您创建的云消息队列 MQTT 版的实例ID。
     */
    static String instanceId = MqttConfig.instanceId;

    /**
     * AccessKey ID，阿里云身份验证，在阿里云RAM控制台创建。
     * 阿里云账号AccessKey拥有所有API的访问权限，建议您使用RAM用户进行API访问或日常运维。
     * 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里，否则可能导致AccessKey泄露，威胁您账号下所有资源的安全。
     * 本示例以将AccessKey 和 AccessKeySecret 保存在环境变量为例说明。
     */
    static String accessKey = MqttConfig.AccessKey;
    /**
     * AccessKey Secret，阿里云身份验证，在阿里云RAM控制台创建。仅在签名鉴权模式下需要设置。
     */
    static String secretKey = MqttConfig.SecretKey;

    /**
     * 您在云消息队列 MQTT 版控制台创建的Group的ID。
     * */
    static String mqttGroupId = MqttConfig.GROUP_ID;

    final static  String parentTopic = MqttConfig.parentTopic;

    static String p2pTopic = parentTopic+ "/p2p/" + MqttConfig.clientId;
    static String sendData = "{\"token\":\"eyJpc3MiOiJKWlgiLCJhbGciOiJFUzI1NiJ9.eyJ1c2VySWQiOiIxNzYxOTQ1NzQ0NzM4OTQ3MDczIiwiY3JlYXRlVGltZSI6IjE3MDkxMTAwOTI0MDgiLCJuaWNrTmFtZSI6IiIsImlzTWFpbiI6dHJ1ZX0.o1RFB56aNJcYCtc_k3qLSl-3caOWMSxFtP3F0VzmpJE7GjvNqizWAgBFbCcN9JZDYwQxuYcnnVXTT8TNmxclww\"}";
    public static void main(String[] args) throws Exception {

        ChannelConfig channelConfig = new ChannelConfig();
        channelConfig.setDomain(domain);
        channelConfig.setPort(port);
        channelConfig.setInstanceId(instanceId);
        channelConfig.setAccessKey(accessKey);
        channelConfig.setSecretKey(secretKey);

        ServerProducer serverProducer = new ServerProducer(channelConfig, new ProducerConfig());
        serverProducer.start();

        String mqttTopic = p2pTopic;
        System.out.println("message send :"+sendData);

        SendResult result = serverProducer.sendMessage(mqttTopic, sendData.getBytes(StandardCharsets.UTF_8));
        if(result.isSuccess()){
            System.out.println("发送MQTT success ！message："+sendData+ " msgId: " + result.getMsgId());
        }else {
            System.out.println("发送MQTT error ！message:"+sendData);
        }
        serverProducer.stop();
//        serverProducer.stop();
    }
}
